package com.tbynet.jwp.repository.spi;

import com.jfinal.plugin.activerecord.Page;
import com.tbynet.jwp.framework.core._JwpService;
import com.tbynet.jwp.model.Posts;

import java.util.List;
import java.util.Map;

/**
 * 高级文章搜索服务
 * @ClassName: PostSearchService
 * @Description: 支持全文搜索、分类搜索、标签搜索等
 * @Author: 佰亿互联
 * @Date: 2025年11月4日
 *
 * @Copyright: 2025 www.tbynet.com Inc. All rights reserved.
 *
 */
public interface PostSearchService extends _JwpService<Posts> {

    /**
     * 搜索文章
     * @param pageNumber
     * @param pageSize
     * @param type
     * @param status
     * @param q
     * @return
     */
    Page<Posts> search(int pageNumber, int pageSize, String type, String status, String q);

    /**
     * 全文搜索
     */
    Page<Posts> fullTextSearch(String keyword, int page, int size);

    /**
     * 高级搜索
     */
    Page<Posts> advancedSearch(Map<String, String> conditions, int page, int size);

    Page<Posts> advancedSearch(int pageNumber, int pageSize, String type, String status,
                                      String keyword, String category, String tag,
                                      String month, Boolean sticky);
    /**
     * 搜索建议
     */
    List<String> getSearchSuggestions(String query);

    /**
     * 热门搜索关键词
     */
    List<String> getHotSearchKeywords();

    /**
     * 重建搜索索引
     */
    boolean rebuildSearchIndex();

    /**
     * 搜索相似文章
     */
    List<Posts> findSimilarPosts(Object postId, int limit);

    /**
     * 按分类搜索
     */
    Page<Posts> searchByCategory(String category, int page, int size);

    /**
     * 按标签搜索
     */
    Page<Posts> searchByTag(String tag, int page, int size);

    /**
     * 按作者搜索
     */
    Page<Posts> searchByAuthor(String author, int page, int size);

    /**
     * 按日期范围搜索
     */
    Page<Posts> searchByDateRange(String startDate, String endDate, int page, int size);
}
